mod重写不起作用,没有给出任何错误

时间:2014-12-16 08:10:29

标签: regex apache .htaccess mod-rewrite

我们想要更改链接" www.example.com/page/login /"到" www.example.com/sayfa/giris"。我试过这个:RewriteRule ^page/^(.+[^/])$/ /sayfa/^(.+[^/])$ [L]但是没有任何改变。有什么错误吗?

非常感谢您的回复@ geert3和@anubhava。但所有尝试都失败了。这是我的.htaccess内容:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=301,L]

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

RewriteRule /(uploads/.*) $1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ page.php?url=$1 [QSA,L]

2 个答案:

答案 0 :(得分:1)

我认为您需要删除第二个^并在第一个^之后添加一个初始斜杠。必须删除$后的斜杠。

^/page/(.+[^/])$

表达式开头的

^表示"行的开头" (在你的情况下,你想在路径前面/page)。在方括号后,它表示"没有列出的字符" (即在你的情况下没有斜线)。在其他地方,没有任何意义。 $表示"行尾"所以在它之后添加东西是没有意义的。

同样正如@Croises所说,你不能拥有"匹配"在右边。右侧是您的目标网址,因此您可以重新使用左侧的匹配项,使用环境变量或硬编码文本,但不能使用新的匹配项。所以没有^[]$等。

例如,整个规则将成为:

^/page/(.+[^/])$ /sayfa/giris [L]

答案 1 :(得分:1)

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=301,L]

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

RewriteRule /(uploads/.*) $1 [R=301,L]

RewriteRule ^sayfa/giris/?$ /page/login [L,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteRule ^(.*)$ page.php?url=$1 [QSA,L]
  • 确保/sayfa/文件夹中没有.htaccess。