多个.php页面的变量重写

时间:2015-02-16 14:39:59

标签: php apache .htaccess mod-rewrite

我试图访问我的两个页面并用.htaccess重写他们的网址。

首页我正在尝试访问:

  

http://api.aotikbot.tv/polls.php?username=aotik

第二页我正在尝试访问:

  

http://api.aotikbot.tv/getpoll.php?poll=917529

我目前的.htaccess代码:

# Apache Rewrite Rules

 <IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

# Add trailing slash to url
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ $1/ [R=301,L]

# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username=$1 [NC,L]
  RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ getpoll.php?poll=$1 [NC,L]

  RewriteRule ^([^\.]+)/$ $1.php 
  # Remove .html-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.html -f
  RewriteRule ^([^\.]+)/$ $1.html 

# End of Apache Rewrite Rules


 </IfModule>

第一页作为/ polls / username使用,但第二页不读取轮询值,我认为重定向到polls.php。

有谁可以解释我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^[A-Za-z0-9-]+/([0-9-]+)/?$ getpoll.php?poll=$1 [NC,L]
RewriteRule ^[A-Za-z0-9-]+/([A-Za-z0-9-]+)/?$ polls.php?username=$1 [NC,L]

在这里,我已经交换了您的两条规则,因此我们首先检查ID(对于getpoll - 请注意我是如何删除表达式中的字母的)。如果我们没有进行ID检查(即片段中有字母),那么它会重写polls

<强>更新

根据arco444,如果用户名是一个数字,这将无法正常工作。这是一个更具体的解决方案:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^getpoll/([0-9-]+)/?$ getpoll.php?poll=$1 [NC,L]
RewriteRule ^polls/([A-Za-z0-9-]+)/?$ polls.php?username=$1 [NC,L]