微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用.htaccess在Apache上从CakePHP 2.x中删除或添加尾部斜杠

我试图使用位于/app/webroot的.htaccess中的以下内容来强制删除添加尾随斜杠到我的CakePHP 2.x应用/app/webroot 。

#<IfModule mod_rewrite.c> # RewriteEngine On # RewriteCond %{REQUEST_FILENAME} !-d # RewriteCond %{REQUEST_FILENAME} !-f # RewriteRule ^ index.PHP [L] #</IfModule> <IfModule mod_rewrite.c> # Add trailing slash RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.[a-zA-Z0-9]{1,5}|)$ RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] </IfModule>

或者添加后面的斜线以下内容

RewriteCond %{REQUEST_URI} !(/$|.) RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]

但我不想强制执行域,因为它可以在本地运行或在子文件夹内运行。 我该如何解决? 我在网上阅读的所有文档似乎强制应用程序的完整url。

事实上,即使我使用全url,它仍然无法正常工作。 有没有人设法得到这个与CakePHP的工作? 似乎你必须通过index.PHP文件运行它

如何根据查询stringredirecturl?

从url去除参数,使一个友好的Url htaccess

尝试在.htaccess中将例外置入RewriteRule

如何在一个.htaccess文件中写入多个重写条件和规则来redirecturl?

.htaccess重写规则冲突

为了说明我正在寻找一个在CakePHP添加删除尾部斜杠的解决scheme,而不必将URL硬编码到.htaccess文件中。

所有的htaccess拒绝Apache服务器testing页面

Hello World使用mod_wsgi,内部错误,configuration错误

为什么htaccess RewriteRule ^ foo $也匹配^ foobar $

我如何使mod_rewrite抑制处理更多的规则?

Htaccess用FastCGI重写

这通常不是一件复杂的事情。

那这个呢 ?

<Ifmodulee mod_rewrite.c> RewriteEngine On # if this is an existing folder/file then leave RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [L] # if trailing slash then redirect to url without trailing slash RewriteRule ^/?(.+)/$ /$1 [R=301,L] # internal rewrite to controller/dispatcher index.PHP RewriteRule ^.*$ /index.PHP [L,QSA] </Ifmodulee>

如果这个不起作用,那么这可能是你身边的一个问题。

你以前使用过mod_rewrite吗? 启用了吗?

编辑:如果您的网站不在根文件夹( DOCUMENT_ROOT ),您有2个选项。 你可以把你的htaccess的application文件夹或根文件夹。

我建议你把你的htaccess放在你的application文件夹里(专门用于你的网站)。 否则,代码将不完全相同。 以下是这种情况下的代码

<Ifmodulee mod_rewrite.c> RewriteEngine On RewriteBase /application/ # if this is an existing folder/file then leave RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [L] # if trailing slash then redirect to url without trailing slash RewriteRule ^/?(.+)/$ $1 [R=301,L] # internal rewrite to controller/dispatcher index.PHP RewriteRule ^.*$ index.PHP [L,QSA] </Ifmodulee>

你的第二个问题:

另外什么是执行尾部斜杠的代码

你可以用这个代码来处理(只改变一行)

<Ifmodulee mod_rewrite.c> RewriteEngine On RewriteBase /application/ # if this is an existing folder/file then leave RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule . - [L] # if no trailing slash then redirect to url with trailing slash RewriteRule ^/?(.+)([^/])$ $1$2/ [R=301,QSA] </Ifmodulee>

尝试这个 :

<Ifmodulee mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.[a-zA-Z0-9]{1,5}|)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] </Ifmodulee>

试试这个( 面包店 ):

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(.[a-zA-Z0-9]{1,5}|/)$ #RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301] RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

如果你想做SEO,你总是可以选择使用规范链接,并停止打扰重定向

<link rel="canonical" href="/your_controller/action/"/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐