2015-01-13 43 views
1

工作,我是新来使用htaccess以及mod_rewrite的,所以我只是设法得到矿山运作重写我的GET页变量examples.com/page_name/的.htaccess mod_rewrite的没有斜线

然而,这需要一个/之后,我知道它明确加入到重写,但如果我删除它,然后我得到一个500错误,我试过添加一个?之后,它会根据我在网上找到的资源使它成为可选项,但是,它再次给了我一个500错误,是否有更好的写作方式呢?

RewriteEngine On 
RewriteRule ^([^/]*)\/$ /?page=$1 [L] 
+0

'重写规则^([^ /] *)(?:\ /)?$ /页= $ 1 [L]'是什么你要。 – Forien

回答

3

,因为你已经创建了一个无限循环你得到一个500错误。

说明:(当斜线由可选)

  • domain.com/page_name/改写为/?page=page_name
  • /?page=page_name意味着/index.php?page=page_name
  • 但现在您的规则匹配index.php
  • - > LOOP

为了避免它,可以如果请求的URI是不存在的文件/文件夹的前rewritting使用此代码代替

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/?$ /?page=$1 [L] 

此代码检查。
如果您没有使斜线可选,则您的规则可以执行此操作只有

RewriteRule ^([^/]+)/$ /?page=$1 [L] 

而且这将是一个更好的主意,因为你不会有重复的内容(2个不同的网址 - 附/不带尾随slash-给予相同的内容:的搜索引擎)。

结论:选择一种格式,但不是两种。如果你选择without trailing slash格式,那么你可以使用我的第一部分代码(你可以删除?)。否则,你可以选择我的第二个(看起来与你的几乎一样)。

注意:你不需要逃避/mod_rewrite的

0

斜杠被转义,所以如果你想删除尾随的,你必须删除反斜杠。

RewriteEngine On 
RewriteRule ^([^\/]*)$ /?page=$1 [L] 

如果你想尾随斜线可选的,试试这个:

RewriteEngine On 
RewriteRule ^([^\/]*)\/?$ /?page=$1 [L] 
+1

不幸的是,这根本不能解决任何问题。你可以看到我的答案。 –