.htaccess重定向错误并循环

时间:2016-05-28 06:01:25

标签: php apache .htaccess redirect mod-rewrite

我尝试使用以下代码推荐网址(例如从page.php?page_id=1page/1page/pagename或仅pagename):

Options +FollowSymLinks -MultiViews
RewriteEngine On

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

RewriteBase /subdirectory/

# If user tries to access "subdirectory/page" without "get" then
RewriteRule ^page/ page.php [L]

# If user tries to access "subdirectory/page/1" or "subdirectory/pagename" then
RewriteRule ^page/1 page.php?page_id=1 [L]
RewriteRule ^page/pagename page.php?page_id=1 [L]

# If user tries to access "subdirectory/pagename" only then
RewriteRule ^pagename page.php?page_id=1 [L]

如果我将其关闭(RewriteEngine Off或甚至删除整个.htaccess文件)并且如果我将其打开,则会出错 - 它会将自身重定向到父目录(localhost www文件夹),例如从subdirectory/page/etc.page/etc.。如果它最终起作用,在我一次又一次地尝试(并且一次又一次地......)为了使其工作而不停地改变它,当它具有尾部斜线时它会导致无限循环(例如{{1或者page/1)或它只是没有正确显示页面(因为浏览器将其视为真实的路径/文件夹,而不是slug)

我知道我可能做错了什么(我是.htaccess的新手),但我不知道......有什么想法吗?

非常感谢。

更新: .htaccess文件位于"子目录"夹。 www文件夹中有另一个.htaccess文件(localhost的主文件夹,也包括"子文件夹"),其中包含:

page/somepage

它的注释只是因为这是禁用它的唯一方法 - 我尝试了#34;重写引擎关闭",没有成功

2 个答案:

答案 0 :(得分:2)

您可以使用以下规则:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /subdirectory/  
#if an existent file or dir is requested,serve it immideatly 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#####
    # If user tries to access "page" without "get" then
RewriteRule ^page/ page.php [L]

# If user tries to access "page/1" or "pagename" then
RewriteRule ^page/1 page.php?page_id=1 [L]
RewriteRule ^page/pagename page.php?page_id=1 [L]

# If user tries to access "pagename" only then
RewriteRule ^pagename page.php?page_id=1 [L]

答案 1 :(得分:0)

由于已经回答了主要问题,这里是尾部斜杠的附加问题。尝试添加重定向规则:

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

这将回复301重定向[R=301]并停止处理更多规则。 [L] =最后一条规则

e.g。 /subdirectory/1/被重定向到/subdirectory/1

现在由浏览器来请求重定向的URL。然后其他规则将付诸行动。