1

楽しみのために、php で reddit のクローンを作成したいと考えています。私は主にJavaの経験がありますが、それが問題になる場合は、PHPの使い方を知っています。また、Rails 3 の経験は非常に限られていますが、Rails が URL を処理する方法も、私が処理したい方法に近いと思います。

これまでのところ、.htaccess には次のものがあります。

RewriteEngine On
RewriteBase / 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /index.php/$1 [L]

これにより、すべてのページが index.php にルーティングされ、そこで URI が解析され、スイッチでリクエストが処理されます。これは長期的にはスケーラブルではないことはわかっていますが、すぐに始めたいと思っています。

私の次のステップは、localhost/r/all のような URL の末尾に / を自動的に追加して、localhost/r/all/ になるようにすることです。

RewriteRule ^/?(.+)$ /$1/ [R]

これにより、500 エラーが発生します。/$1/ が ^/?(.+) になるため、リダイレクトの無限ループに陥ってしまうためだと思います。だから私は次のようなものが必要です:

RewriteRule ^/?(.+)Does not end in a forwardlash$ /$1/ [R]

これどうやってするの?私はそれを参照してください!文字は、一致してはならない条件を示すために使用できますが、これを機能させるのに問題があります。

どんなアドバイスでも大歓迎です。

編集:

getenv("DOCUMENT_ROOT") //gives /var/www

私は /var/www/index.php を /www に住んでいます。これらの変更を行っている .htaccess ファイルは /var にあります。

/var に .htaccess があります。これは、httpd.cong に次のようなものがあるためです。

<Directory /var>
AllowOverride All
</Directory>

私は最初にそれを持ってみました

<Directory /var/www> 

.htaccess を www に入れますが、読み込まれません。ゴミを入れてエラーがないので、読まれていないことがわかります。しかし、/var にゴミがあり、Drectory ディレクティブが /var を指定すると、エラーが発生します。

4

1 に答える 1

1

これを試してください(テストされていません):

# Turn mod_rewrite on, yada yada yada
RewriteEngine On
RewriteBase / 

# We'll want to do the redirect before rewriting anything
# Files obviously don't have a trailing slash, and directories require one - so
# we only need to check if the file exists
# I'm not actually sure if mod_rewrite understands non-capturing groups though
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?((?:.+?)[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301]

# Do the rewrite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php/$1 [L]

あなたの試みの問題は、ルールの順序RewriteCond、リダイレクトの欠落、および/またはリダイレクトにフラグをRewriteRule付けなかった可能性が高いと感じますが、上記の正規表現はあなたよりも幸せです、それらが一致するものについてもう少し具体的であるため。LRewriteRule

上記で使用したすべての正規表現機能をサポートしているかどうかは実際にmod_rewriteはわかりません。エラーが引き続き発生する場合は、それが原因である可能性があります。問題が発生した場合は、ここに戻って詳細を確認します。

于 2012-07-20T20:17:37.103 に答える